/**
 * aui-scroll.js
 * @author  流浪男
 * @todo more things to abstract, e.g. Loading css etc.
 * Licensed under the MIT license.
 * http://www.opensource.org/licenses/mit-license.php
 */
(function (window) {
    "use strict";
    var isToBottom = false,
        isMoved = false;
    var auiScroll = function (params, callback) {
        this.extend(this.params, params);
        this._init(params, callback);
    };
    auiScroll.prototype = {
        params: {
            listren: false,
            distance: 100,
        },
        _init: function (params, callback) {
            var self = this;
            if (self.params.listen) {
                document.body.addEventListener("touchmove", function (e) {
                    self.scroll(callback);
                });
                document.body.addEventListener("touchend", function (e) {
                    self.scroll(callback);
                });
            }
            window.onscroll = function () {
                self.scroll(callback);
            };
        },
        scroll: function (callback) {
            var self = this;
            var clientHeight =
                document.documentElement.scrollTop === 0
                    ? document.body.clientHeight
                    : document.documentElement.clientHeight;
            var scrollTop =
                document.documentElement.scrollTop === 0
                    ? document.body.scrollTop
                    : document.documentElement.scrollTop;
            var scrollHeight =
                document.documentElement.scrollTop === 0
                    ? document.body.scrollHeight
                    : document.documentElement.scrollHeight;

            if (
                scrollHeight - scrollTop - self.params.distance <=
                window.innerHeight
            ) {
                isToBottom = true;
                if (isToBottom) {
                    callback({
                        scrollTop: scrollTop,
                        isToBottom: true,
                    });
                }
            } else {
                isToBottom = false;
                callback({
                    scrollTop: scrollTop,
                    isToBottom: false,
                });
            }
        },
        extend: function (a, b) {
            for (var key in b) {
                if (b.hasOwnProperty(key)) {
                    a[key] = b[key];
                }
            }
            return a;
        },
    };
    window.auiScroll = auiScroll;
})(window);
